在之前「Day05: MongoDB 的 CRUD(3) - Find & Update」這篇文章中曾使用到 比較查詢運算子
$gt來做進階的資料查詢,接下來三篇將會介紹在 MongoDB 中使用的運算子:比較查詢運算子、邏輯查詢運算子、元素查詢運算子及 Array 查詢運算子。

對資料進行簡單的查詢操作時,我們只會使用 method 加上 filters 進行查詢,例如要查詢「年齡是20歲」的人,只需要使用 db.collection.find( {age: 20} )。但若要查詢「年齡超過20歲」的人,則需要使用較複雜的 filters:db.collection.find( {age: {$gt: 20}} ),比起第一個查詢,多了 $gt 這個 operator 運算子。
如我們之前使用過的 $gt ,比較運算子是用來比較值的大小,有以下幾種比較運算子:
$eq:等於
db.inventory.find( {tags : {$eq : ['A', 'B']}} ) 
db.inventory.find( {tags : ['A', 'B']} )
$gt:大於$gte:大於等於$in:包含其中任意一個
db.inventory.find( {price : {$in : [5, 15]}} ):價格為5或15的庫存$lt:小於$lte:小於等於$ne:不等於
db.inventory.find( {price : {$ne : 20}} ):價格不是20的庫存$nin:不包含其中任意一個
db.inventory.find( {price : {$nin : [5, 15]}} ):價格不是5也不是15的庫存我們直接來用以下範例來介紹這些比較查詢運算子:
[
    {
        "title": "Avatar",
        "year": 2009,
        "director_name": "James Cameron",
        "actors": [
            "CCH Pounder",
            "Joel David Moore"
        ],
        "duration": 178,
        "country": "USA",
        "content_rating": "PG-13",
        "gross": 760505847,
        "imdb_score": 7.9
    },
	
    ...
	
    {
        "title": "The Hobbit: An Unexpected Journey",
        "year": 2012,
        "director_name": "Peter Jackson",
        "actors": [
            "Aidan Turner",
            "Adam Brown"
        ],
        "duration": 182,
        "country": "USA",
        "content_rating": "PG-13",
        "gross": 303001229,
        "imdb_score": 7.9
    }
]
導入範例資料:mongoimport /Users/andylin/Documents/resource/courses/mongodb/movie.json -d demo -c movie --jsonArray --drop 
用 findOne() 檢視 
db.movie.find({imdb_score: {$gt: 8}}) 
db.movie.find({imdb_score: {$lt: 7}})
db.movie.find({imdb_score: {$eq: 7}}).count()
db.movie.find({imdb_score: 7}).count()
db.movie.find({actors: {$in: ["Johnny Depp"]}}).pretty()
db.movie.find({actors: {$nin: ["Johnny Depp"]}}).pretty()
邏輯查詢運算子是用來做一些邏輯判斷,有以下幾種邏輯查詢運算子:
$and:邏輯和
db.inventory.find( {$and: [{price: {$ne: 1.99}} , {price: {$exists: true}}]} ) 
$not:邏輯非
db.inventory.find( {price {$not {$gt: 1.99}}} )
$nor:邏輯或的反義
db.inventory.find( {$nor: [{price: 1.99}, {sale: true}]} )
$or:邏輯或
db.inventory.find( {$or: [{quantity: {$lt: 20}}, {price: 10}]} )
db.movie.find({$and: [{imdb_score: {$gt: 7}} , {imdb_score: {$lt: 8}}]})
方法1:db.movie.find({imdb_score: {$gt: 7}}).count() 
方法2:db.movie.find({imdb_score: {$not: {$lte: 7}}}).count() 
db.movie.find({$or: [{imdb_score: {$lt: 7}} , {imdb_score: {$gt: 8}}]})
練習四:查詢 imdb_score 大於等於 7 且小於等於 8 的電影
今天介紹了比較查詢運算子及邏輯查詢運算子,可以用來做進階的過濾查詢,下一篇會接著介紹元素查詢運算子。